import type { 
  IApiResponse, 
  IApiPaginatedResponse, 
  IBatchRequest, 
  IBatchResponse
} from '../common/api';
import type { IPaginatedQuery } from '../common/pagination';
import type { 
  ICourse, 
  ICourseCreateRequest, 
  ICourseUpdateRequest, 
  ICourseQueryParams,
  ICourseStatistics,
  ICourseSummary,
  ICourseDetail
} from './course';
import type {
  ICourseCategory,
  ICourseCategoryCreateRequest,
  ICourseCategoryUpdateRequest,
  ICourseCategoryQueryParams,
  ICourseCategoryTreeNode,
  ICourseCategoryStatistics,
  ICourseCategorySummary
} from './courseCategory';

// ==================== 课程相关 API 类型 ====================

/**
 * 获取课程列表 API 响应
 * @description 分页获取课程列表的响应类型
 */
export type IGetCoursesResponse = IApiPaginatedResponse<ICourse>;

/**
 * 获取课程详情 API 响应
 * @description 获取单个课程详情的响应类型
 */
export type IGetCourseResponse = IApiResponse<ICourseDetail>;

/**
 * 创建课程 API 响应
 * @description 创建课程的响应类型
 */
export type ICreateCourseResponse = IApiResponse<ICourse>;

/**
 * 更新课程 API 响应
 * @description 更新课程信息的响应类型
 */
export type IUpdateCourseResponse = IApiResponse<ICourse>;

/**
 * 删除课程 API 响应
 * @description 删除课程的响应类型
 */
export type IDeleteCourseResponse = IApiResponse<{ id: string }>;

/**
 * 获取课程统计 API 响应
 * @description 获取课程统计信息的响应类型
 */
export type IGetCourseStatisticsResponse = IApiResponse<ICourseStatistics>;

/**
 * 获取课程简要列表 API 响应
 * @description 获取课程简要信息列表的响应类型
 */
export type IGetCourseSummariesResponse = IApiResponse<ICourseSummary[]>;

/**
 * 课程查询请求参数
 * @description 查询课程列表的请求参数
 */
export type ICourseListRequest = IPaginatedQuery<ICourseQueryParams>;

/**
 * 批量课程操作请求
 * @description 批量操作课程的请求参数
 */
export type ICourseBatchRequest = IBatchRequest<string>;

/**
 * 批量课程操作响应
 * @description 批量操作课程的响应类型
 */
export type ICourseBatchResponse = IApiResponse<IBatchResponse<string>>;

// ==================== 课程分类相关 API 类型 ====================

/**
 * 获取课程分类列表 API 响应
 * @description 分页获取课程分类列表的响应类型
 */
export type IGetCourseCategoriesResponse = IApiPaginatedResponse<ICourseCategory>;

/**
 * 获取课程分类树 API 响应
 * @description 获取课程分类树结构的响应类型
 */
export type IGetCourseCategoryTreeResponse = IApiResponse<ICourseCategoryTreeNode[]>;

/**
 * 获取课程分类详情 API 响应
 * @description 获取单个课程分类详情的响应类型
 */
export type IGetCourseCategoryResponse = IApiResponse<ICourseCategory>;

/**
 * 创建课程分类 API 响应
 * @description 创建课程分类的响应类型
 */
export type ICreateCourseCategoryResponse = IApiResponse<ICourseCategory>;

/**
 * 更新课程分类 API 响应
 * @description 更新课程分类信息的响应类型
 */
export type IUpdateCourseCategoryResponse = IApiResponse<ICourseCategory>;

/**
 * 删除课程分类 API 响应
 * @description 删除课程分类的响应类型
 */
export type IDeleteCourseCategoryResponse = IApiResponse<{ id: string }>;

/**
 * 获取课程分类统计 API 响应
 * @description 获取课程分类统计信息的响应类型
 */
export type IGetCourseCategoryStatisticsResponse = IApiResponse<ICourseCategoryStatistics>;

/**
 * 获取课程分类简要列表 API 响应
 * @description 获取课程分类简要信息列表的响应类型
 */
export type IGetCourseCategorySummariesResponse = IApiResponse<ICourseCategorySummary[]>;

/**
 * 课程分类查询请求参数
 * @description 查询课程分类列表的请求参数
 */
export type ICourseCategoryListRequest = IPaginatedQuery<ICourseCategoryQueryParams>;

/**
 * 批量课程分类操作请求
 * @description 批量操作课程分类的请求参数
 */
export type ICourseCategoryBatchRequest = IBatchRequest<string>;

/**
 * 批量课程分类操作响应
 * @description 批量操作课程分类的响应类型
 */
export type ICourseCategoryBatchResponse = IApiResponse<IBatchResponse<string>>;

// ==================== 课程导入导出相关 API 类型 ====================

/**
 * 课程导入请求
 * @description 批量导入课程数据的请求参数
 */
export interface ICourseImportRequest {
  /** 导入的课程数据列表 */
  courses: ICourseCreateRequest[];
  /** 是否覆盖已存在的课程（根据课程代码判断） */
  overwrite?: boolean;
  /** 导入模式 */
  mode?: 'create' | 'update' | 'upsert';
  /** 是否自动创建不存在的分类 */
  autoCreateCategories?: boolean;
}

/**
 * 课程导入响应
 * @description 批量导入课程数据的响应类型
 */
export interface ICourseImportResponse {
  /** 成功导入的课程数量 */
  successCount: number;
  /** 失败的课程数量 */
  failedCount: number;
  /** 成功导入的课程列表 */
  successList: ICourse[];
  /** 失败的课程信息 */
  failedList: Array<{
    /** 课程数据 */
    course: ICourseCreateRequest;
    /** 失败原因 */
    reason: string;
  }>;
  /** 自动创建的分类列表 */
  createdCategories?: ICourseCategory[];
}

/**
 * 课程导出请求
 * @description 导出课程数据的请求参数
 */
export interface ICourseExportRequest {
  /** 导出的课程ID列表，为空则导出所有 */
  courseIds?: string[];
  /** 导出格式 */
  format?: 'json' | 'csv' | 'excel';
  /** 导出字段 */
  fields?: Array<keyof ICourse>;
  /** 筛选条件 */
  filters?: ICourseQueryParams;
  /** 是否包含分类信息 */
  includeCategories?: boolean;
}

/**
 * 课程搜索建议响应
 * @description 课程搜索建议的响应类型
 */
export interface ICourseSearchSuggestion {
  /** 课程ID */
  id: string;
  /** 课程名称 */
  name: string;
  /** 课程代码 */
  courseCode: string;
  /** 授课教师 */
  teacher: string;
  /** 匹配的字段 */
  matchField: 'name' | 'courseCode' | 'teacher' | 'description';
}

/**
 * 课程搜索建议 API 响应
 * @description 获取课程搜索建议的响应类型
 */
export type IGetCourseSuggestionsResponse = IApiResponse<ICourseSearchSuggestion[]>;

/**
 * 课程分类关联操作请求
 * @description 管理课程与分类关联关系的请求参数
 */
export interface ICourseCategoryRelationRequest {
  /** 课程ID */
  courseId: string;
  /** 分类ID列表 */
  categoryIds: string[];
  /** 操作类型 */
  action: 'add' | 'remove' | 'replace';
}

/**
 * 课程分类关联操作响应
 * @description 管理课程与分类关联关系的响应类型
 */
export type ICourseCategoryRelationResponse = IApiResponse<{
  courseId: string;
  categoryIds: string[];
  updatedAt: number;
}>;